Smooch: как вызвать обратную передачу, когда пользователь нажимает кнопку?

У меня есть вопросы по кнопке постбэка.

Мы разрабатываем собственный веб-мессенджер с использованием Smooch.

Я делаю вызов API с помощью Smooch-core. (как показано ниже)

this.smooch = await new SmoochCore({
    keyId: SMOOCH_KEY_ID,
    secret: SMOOCH_SECRET,
    ....
  });
...
await this.smooch.appUsers.sendMessage(this.appId, this.userId, message);

Проблема в том, что при рендеринге и нажатии кнопки он работает не так, как предполагалось.

Чтобы создать кнопку в окне Messenger, создатель приложения отправляет сообщение с действием типа обратной передачи, получает полезную нагрузку сообщения от веб-перехватчика, а затем отображает кнопку и обрабатывает действие щелчка в соответствии с нашей системной политикой.

Вот код сообщения, которое отправляет производитель приложения

{
"role": "appMaker",
"type": "text",
"text": "check in/out infos",
"actions": [
    {
        "text": "Check In Info",
        "type": "postback",
        "payload": "{\"text\": \"Check in info\", \"type\": \"start\", \"flow\": \"checkInOut\", \"message_id\": \"MESSAGEID001\", \"data\": {\"intent\": \"info_check_in\"}}"
    },
    {
        "text": "Check Out Info",
        "type": "postback",
        "payload": "{\"text\": \"Check out info\", \"type\": \"start\", \"flow\": \"checkInOut\", \"message_id\": \"MESSAGEID001\", \"data\": {\"intent\": \"info_check_out\"}}"

    },
    {
        "text": "Early Check In Info,
        "type": "postback",
        "payload": "{\"text\": \"Early check in\", \"type\": \"start\", \"flow\": \"checkInOut\", \"message_id\": \"MESSAGEID001\", \"data\": {\"intent\": \"info_early_check_in\"}}"

    }
]
}

Моя система отображает действия (кнопки) сообщения с помощью ReactJS.

<ul className={b('button-group')}>
      {
        actions.map((action, index) => {
          return (
            <li
              key={index}
              onClick={this.onChoiceButtonClick(action)}
            >
              <span>{action.text}</span>
            </li>
          );
        })
      }
    </ul>

Поскольку я обрабатываю событие нажатия кнопки в нашей системе, я хочу выполнить то же действие, что и нажатие кнопки обратной передачи, предоставленной Smooch.

(То есть «trigger»: «postback», например «trigger»: «message: appUser» для smooch.appUsers.sendMessage)

Как мне с этим справиться?

Буду очень признателен, если вы дадите мне совет. :)

1
0
112
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы должны вызвать метод triggerPostback в ответ на нажатие пользователем вашей настраиваемой кнопки. Согласно фрагменту кода, который вы опубликовали выше, вы вызываете метод onChoiceButtonClick. Реализация этого метода должна выглядеть примерно так:

function onChoiceButtonClick(action) {
    Smooch.triggerPostback(action._id);
}

Спасибо за ответ ~ Кстати, я использую Smooch-core, а не Smooch. Есть ли способ справиться со Smooch-core?

Woojin Jeong 13.09.2018 21:17

smooch-core - это библиотека для межсерверных вызовов, она не предназначена для использования в качестве клиента API для управления взаимодействием с appUser или настраиваемым пользовательским интерфейсом. Публичный API (и, следовательно, smooch-core) не предоставляет способ инициировать обратную передачу от имени appUser. Я бы посоветовал ознакомиться с руководством по реализация собственного пользовательского интерфейса Web Messenger

michaels 14.09.2018 14:33

Другие вопросы по теме