Smooch:如何在用户单击按钮时触发回发?

时间:2018-09-13 18:18:11

标签: smooch

我对回发按钮有一些疑问。

我们正在使用Smooch开发独立构建的自己的Web Messenger。

我正在使用Smooch-core进行API调用。 (如下所示)

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提供的回发按钮相同的操作。

(即smooch.appUsers.sendMessage的“ trigger”:“ postback”,例如“ trigger”:“ message:appUser”)

我该如何处理?

如果您能给我一些建议,将不胜感激。 :)

1 个答案:

答案 0 :(得分:1)

您应该调用triggerPostback方法来响应用户单击自定义按钮的情况。根据上面发布的代码段,您正在调用方法onChoiceButtonClick。该方法的实现应如下所示:

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