Smooch: Как вызвать постбэк, когда пользователь нажимает кнопку? - PullRequest
0 голосов
/ 13 сентября 2018

У меня есть несколько вопросов по поводу кнопки обратной передачи.

Мы разрабатываем независимый собственный веб-мессенджер с использованием 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, создатель приложения отправляет сообщение с действием типа обратной передачи, получает полезную нагрузку сообщения от webhook, а затем отображает кнопку и обрабатывает действие нажатия в соответствии с нашей системной политикой.

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

{
"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 голосов
/ 13 сентября 2018

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

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