【问题标题】:How to get images/attachments sent by user from Facebook messenger bot through Dialog Flow (API.AI)?如何通过对话流(API.AI)获取用户从 Facebook Messenger bot 发送的图像/附件?
【发布时间】:2018-04-03 07:05:17
【问题描述】:

我有由 Dialog Flow (API.AI) 提供支持的 Chabot,它需要用户发送图像。

我知道,当用户单击 Messenger 中的“开始”按钮(开始与机器人对话时)时,将触发 Dialog Flow (API.AI) 中带有 WELCOME/FACEBOOK_WELCOME 事件的意图。

当用户发送简单的文本消息时,对话流 (API.AI) 中的意图以及用户说中的文本将被触发。

我怀疑 Dialog Flow (API.AI) 中是否有任何意图在用户将图像作为附件发送到机器人时触发,或者是否有任何方法可以实现这种功能。

请帮我解决这个问题

提前致谢

【问题讨论】:

    标签: attachment chatbot dialogflow-es facebook-chatbot


    【解决方案1】:

    在 DialogFlow (API.AI) 中任何意图的事件部分中使用 FACEBOOK_MEDIA。现在,每当用户将图像上传到机器人时,在其事件部分中包含 FACEBOOK_MEDIA 的意图将被触发,您将获得一个包含图像 URL 的有效负载到您的 WebHook .

    【讨论】:

    • 你能指定确切的变量名来获取 url。我试过 #FACEBOOK_MEDIA.url 和 #FACEBOOK_MEDIA.imageUrl 提前谢谢。
    • 您是使用任何平台(如DialogFlow、Motion.ai)进行开发还是直接使用您自己的任何网络挂钩。
    • 是的,我正在使用 DialogFlow。
    • 这个活动好像没有了。
    • 该事件只是没有出现在下拉框中,但是如果您输入它就可以了!
    【解决方案2】:

    以下是我在 facebook messenger 上上传图片作为附件时得到的响应。我使用了 dialogflow.com,并使用 AWS Lambda 函数、API Gateway 和 AWS CloudWatch Logs 在 nodejs 中集成了我的 webhook 处理程序。您还可以提供 webhook 请求和打印日志。编写 console.log() 确实有助于打印从 facbook messenger 发送到我们的 webhook 的对象。

    exports.handler = (event, context, callback) => {
      console.log(event);
      console.log(event.originalRequest.data.message.attachments[0].payload.url);
    };

    您将获得打印在 cloudwatch 日志中的事件对象 url: 在事件对象中,url 是:https://scontent-ort2-2.xx.fbcdn.net/v/t34.18173-12/30776728_1969968496378460_1504397895_n.png?_nc_cat=0&_nc_ad=z-m&_nc_cid=0&oh=4aad83994a5501d1c50f7e2e6c7d50ea&oe=5ADBEF72

    {
        "originalRequest": {
            "source": "facebook",
            "data": {
                "sender": {
                    "id": "2037600292946778"
                },
                "recipient": {
                    "id": "592499574453638"
                },
                "message": {
                    "attachments": [
                        {
                            "payload": {
                                "url": "https://scontent-ort2-2.xx.fbcdn.net/v/t34.18173-12/30776728_1969968496378460_1504397895_n.png?_nc_cat=0&_nc_ad=z-m&_nc_cid=0&oh=4aad83994a5501d1c50f7e2e6c7d50ea&oe=5ADBEF72"
                            },
                            "type": "image"
                        }
                    ],
                    "mid": "mid.$cAAJAFU4_rqppFAhJFli4sL-nvI2y",
                    "seq": 274
                },
                "timestamp": 1524222785882
            }
        },
        "id": "323b2069-1fb3-4643-9cab-a36562286069",
        "timestamp": "2018-04-20T11:13:06.117Z",
        "lang": "en",
        "result": {
            "source": "agent",
            "resolvedQuery": "FACEBOOK_MEDIA",
            "speech": "",
            "action": "",
            "actionIncomplete": false,
            "parameters": {},
            "contexts": [
                {
                    "name": "facebook_media",
                    "parameters": {},
                    "lifespan": 0
                },
                {
                    "name": "generic",
                    "parameters": {
                        "facebook_sender_id": "2037600292946778"
                    },
                    "lifespan": 4
                }
            ],
            "metadata": {
                "intentId": "52d18e01-1ff2-4e35-af42-bc2de65fa38b",
                "webhookUsed": "true",
                "webhookForSlotFillingUsed": "false",
                "intentName": "attachment intent"
            },
            "fulfillment": {
                "speech": "Received an image",
                "messages": [
                    {
                        "type": 0,
                        "speech": "Received an image"
                    }
                ]
            },
            "score": 1
        },
        "status": {
            "code": 200,
            "errorType": "success",
            "webhookTimedOut": false
        },
        "sessionId": "d815740b-4f6d-432b-991d-c1125ceb2665"
    }
    

    【讨论】:

      【解决方案3】:

      在DialogFlow中使用WebhookClient时,可以这样获取图片url:

      const agent = new WebhookClient({ request, response });
      const imageUrl = agent.request_.body.originalDetectIntentRequest.payload.data.message.attachments[0].payload.url;
      

      【讨论】:

        【解决方案4】:

        我的解决方案:

        exports.imageFb = function imageFb (request, response){
            console.log(request.body.originalDetectIntentRequest.payload.data.message.attachments[0].payload.url);
        }           
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-03-30
          • 2016-08-08
          • 1970-01-01
          • 1970-01-01
          • 2017-12-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多