You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Twilio Webhook在WhatsApp与IBM Watson集成中获取媒体URL

实现Twilio WhatsApp媒体URL传递至IBM Watson的方案

核心思路

Twilio收到WhatsApp图片消息后,会通过Webhook发送包含媒体信息的请求,你可以通过中间服务转译请求格式,直接把媒体URL传递给IBM Watson;也可以只传消息ID到Watson,再让Watson调用Twilio API获取媒体URL。


方案一:通过中间服务直接传递媒体URL

  1. 配置Twilio Webhook
    在Twilio的WhatsApp号码设置中,将Webhook地址指向你搭建的中间服务接口(比如https://your-server.com/twilio-webhook)。Twilio收到图片消息时,会自动发送POST请求到这个接口,请求里包含MediaUrl0(图片直接访问URL)、MessageSid(消息ID)、Body(图片文件名)等关键字段。

  2. 中间服务处理并转发到Watson
    用任意后端语言编写接口接收Twilio的请求,提取媒体信息后,按照IBM Watson的要求格式发送请求。以下是Node.js Express的示例代码:

const express = require('express');
const axios = require('axios');
const app = express();
app.use(express.urlencoded({ extended: true }));

// 接收Twilio的Webhook请求
app.post('/twilio-webhook', async (req, res) => {
  // 提取Twilio请求中的媒体信息
  const mediaUrl = req.body.MediaUrl0;
  const messageSid = req.body.MessageSid;
  const fileName = req.body.Body;

  // 构造Watson需要的请求体
  const watsonPayload = {
    input: {
      text: `用户发送了图片:${fileName},访问链接:${mediaUrl}`
    },
    // 若Watson支持结构化数据,可单独传递字段到上下文
    context: {
      media_url: mediaUrl,
      message_sid: messageSid,
      file_name: fileName
    }
  };

  // 发送请求到IBM Watson的对话API
  await axios.post('YOUR_WATSON_ASSISTANT_API_URL', watsonPayload, {
    headers: {
      'Content-Type': 'application/json',
      'Authorization': 'Bearer YOUR_WATSON_API_KEY'
    }
  });

  // 给Twilio返回空响应,告知消息已处理
  res.send('<Response></Response>');
});

app.listen(3000, () => console.log('中间服务运行在3000端口'));
  1. Watson中使用媒体URL
    在Watson Assistant的对话节点中,你可以直接引用context.media_url变量获取图片链接,用于后续存储、展示或业务逻辑处理。

方案二:传递MessageSid到Watson,由Watson主动获取媒体URL

如果不想搭建中间服务,也可以让Twilio把MessageSid传给Watson,再通过Watson的Webhook调用Twilio API获取媒体URL:

  1. 配置Twilio直接传递MessageSid
    在Twilio的Webhook设置中,确保请求包含MessageSid字段(默认会包含),将Webhook直接指向Watson的Webhook地址,或通过Watson的对话节点触发Webhook调用。

  2. Watson中调用Twilio API获取媒体URL
    在Watson的Webhook实现中,用Twilio的账号凭据调用Messages API,通过MessageSid获取媒体信息:

const twilio = require('twilio');
const client = twilio('你的Twilio Account SID', '你的Twilio Auth Token');

// Watson Webhook的处理函数
exports.handler = async (req) => {
  const messageSid = req.body.context.message_sid; // 从Watson上下文中获取MessageSid
  const message = await client.messages(messageSid).fetch();
  const mediaUrl = message.media[0]?.url; // 获取第一张图片的URL

  // 返回媒体URL到Watson上下文
  return {
    context: {
      media_url: mediaUrl
    }
  };
};

注意:这种方式需要在Watson的Webhook中存储Twilio的敏感凭据,建议用环境变量管理,避免泄露。


内容的提问来源于stack exchange,提问作者gayatri

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 19:27:35