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

如何将Api.Ai(Dialogflow)聊天机器人与交易类网站集成实现预订/下单

嘿,你这个想法超实用!既然已经用Dialogflow搭好了能日常对话的机器人,用Webhook来对接这些交易平台确实是最顺的路子——毕竟Dialogflow的Webhook本来就是用来扩展自定义功能的核心入口。下面我结合你提到的三个平台,给你拆解具体的实现步骤,都是实打实的可操作方案:

核心逻辑:用Dialogflow Webhook串联第三方API

简单来说,整个流程是这样的:

  • 用户跟机器人说“我要订个大号芝士披萨”,Dialogflow识别出意图是「订披萨」,同时提取出「尺寸:大号」「口味:芝士」这些关键实体
  • Dialogflow把这些数据发送给你搭建的Webhook服务
  • 你的Webhook服务调用对应平台的API(比如Domino's的订单接口)完成操作
  • Webhook把操作结果返回给Dialogflow,机器人再把结果用自然语言告诉用户

下面是三个平台的具体落地步骤:

1. 对接 Domino's 订购披萨

Domino's在部分地区提供官方开发者API,你可以按以下步骤来:

  • 第一步:拿API权限:去Domino's开发者平台注册账号,申请API密钥,同时熟悉他们的接口文档(比如获取菜单、创建订单、查询配送状态这些)
  • 第二步:配置Dialogflow意图:创建名为OrderPizza的意图,添加「披萨尺寸」「口味」「配送地址」「联系方式」这些实体(Dialogflow自带的地址、文本实体可以直接用,也可以自定义),确保机器人能准确提取用户的需求
  • 第三步:写Webhook服务:用你熟悉的语言(比如Python/Node.js)搭建一个接收Dialogflow请求的服务,把提取到的实体整理成Domino's API要求的格式,调用订单接口。举个Python(Flask)的简单示例:
from flask import Flask, request, jsonify
import requests

app = Flask(__name__)
# 替换成你自己的Domino's API密钥和接口地址
DOMINOS_API_KEY = "your_api_key_here"
DOMINOS_ORDER_URL = "https://api.dominos.com/order/create"

@app.route('/webhook', methods=['POST'])
def webhook():
    req = request.get_json()
    intent_name = req['queryResult']['intent']['displayName']
    
    if intent_name == 'OrderPizza':
        # 提取Dialogflow传来的用户需求
        pizza_size = req['queryResult']['parameters']['size']
        pizza_topping = req['queryResult']['parameters']['topping']
        delivery_addr = req['queryResult']['parameters']['address']
        
        # 构造Domino's API需要的请求数据
        order_payload = {
            "size": pizza_size,
            "toppings": [pizza_topping],
            "deliveryAddress": delivery_addr,
            "apiKey": DOMINOS_API_KEY
        }
        
        # 调用Domino's API创建订单
        api_response = requests.post(DOMINOS_ORDER_URL, json=order_payload)
        result = api_response.json()
        
        # 把结果返回给Dialogflow,让机器人告诉用户
        if result.get('status') == 'success':
            fulfillment_text = f"搞定啦!你的披萨订单号是{result['orderId']},预计30分钟内送到~"
        else:
            fulfillment_text = "抱歉哦,刚才创建订单失败了,麻烦再试一次?"
        
        return jsonify({'fulfillmentText': fulfillment_text})
    
    return jsonify({'fulfillmentText': "我暂时处理不了这个请求哦😅"})

if __name__ == '__main__':
    app.run(port=5000, debug=True)
  • 第四步:部署+配置:把Webhook服务部署到公网(比如用Heroku、AWS Lambda),然后在Dialogflow的「Fulfillment」页面里填好你的Webhook URL,给OrderPizza意图开启Webhook调用权限

2. 对接 Expedia 预订机票

Expedia有专门的合作伙伴开发者平台,提供航班、酒店等预订API,流程会比订披萨复杂一点(因为涉及多轮对话):

  • 第一步:申请API权限:注册Expedia开发者账号,申请航班预订相关的API权限,获取API密钥和OAuth令牌(部分接口需要身份验证)
  • 第二步:配置Dialogflow意图和上下文:创建BookFlight意图,添加「出发地」「目的地」「出发日期」「乘客数」这些实体;同时配置上下文(Contexts),用来保存中间状态(比如用户选了航班后,把航班ID存在上下文里,下一步收集乘客信息)
  • 第三步:Webhook处理多轮流程:先调用Expedia的航班搜索API,返回几个可选航班让用户选择,用户选完后再调用预订接口。举个Node.js(Express)的示例片段:
const express = require('express');
const request = require('request');
const app = express();
app.use(express.json());

// 替换成你自己的Expedia API信息
const EXPEDIA_API_KEY = 'your_api_key_here';
const EXPEDIA_FLIGHT_SEARCH_URL = 'https://api.expedia.com/v1/flights/search';

app.post('/webhook', (req, res) => {
    const intentName = req.body.queryResult.intent.displayName;
    
    if (intentName === 'BookFlight') {
        const origin = req.body.queryResult.parameters.origin;
        const destination = req.body.queryResult.parameters.destination;
        const departureDate = req.body.queryResult.parameters.departureDate;
        
        // 构造航班搜索参数
        const searchParams = {
            origin,
            destination,
            departureDate,
            apiKey: EXPEDIA_API_KEY
        };
        
        // 调用Expedia航班搜索API
        request.post({url: EXPEDIA_FLIGHT_SEARCH_URL, json: searchParams}, (error, response, body) => {
            if (!error && response.statusCode === 200) {
                // 取前3个航班选项给用户选
                const topFlights = body.flights.slice(0, 3);
                let replyText = "找到以下合适的航班:\n";
                topFlights.forEach((flight, idx) => {
                    replyText += `${idx+1}. ${flight.airlineName},${flight.departureTime}起飞,价格${flight.totalPrice}元\n`;
                });
                replyText += "请告诉我你想选哪一个?";
                
                // 把航班信息存在上下文里,方便后续调用预订接口
                const outputContexts = [
                    {
                        name: `${req.body.session}/contexts/flight-options`,
                        lifespanCount: 5,
                        parameters: {flights: topFlights}
                    }
                ];
                
                res.json({
                    fulfillmentText: replyText,
                    outputContexts: outputContexts
                });
            } else {
                res.json({fulfillmentText: "抱歉,暂时搜不到合适的航班,麻烦稍后再试?"});
            }
        });
    }
});

app.listen(3000, () => console.log('Webhook服务器跑在3000端口啦'));
  • 第四步:处理支付与确认:机票预订需要用户填写乘客信息、完成支付,这部分可以引导用户跳转到Expedia的官方页面完成,或者调用Expedia的支付API(需要额外的权限)

3. 对接 eBay 添加商品到购物车

eBay的开发者平台提供购物车相关API,需要注意用户授权的问题(因为要添加到用户自己的购物车):

  • 第一步:申请API权限:注册eBay开发者账号,创建应用,获取OAuth令牌(用于调用需要用户授权的接口)
  • 第二步:配置Dialogflow意图:创建AddToEBayCart意图,添加「商品名称」「数量」这些实体,也可以让用户描述商品,你调用eBay的搜索API找到对应的商品ID
  • 第三步:Webhook实现添加逻辑:先调用eBay的商品搜索API找到商品ID,再调用「添加到购物车」接口。如果用户还没授权,要引导用户完成授权流程。举个Python示例:
import requests
from flask import Flask, request, jsonify

app = Flask(__name__)
# 替换成你自己的eBay应用信息
EBAY_CLIENT_ID = "your_client_id_here"
EBAY_OAUTH_URL = "https://api.ebay.com/identity/v1/oauth2/token"
EBAY_SEARCH_URL = "https://api.ebay.com/buy/browse/v1/item_summary/search"
EBAY_ADD_CART_URL = "https://api.ebay.com/buy/basket/v1/basket/add_item"

def get_ebay_token():
    # 获取eBay的OAuth令牌
    response = requests.post(EBAY_OAUTH_URL, data={
        "grant_type": "client_credentials",
        "client_id": EBAY_CLIENT_ID,
        "scope": "https://api.ebay.com/oauth/api_scope/buy.basket"
    })
    return response.json()['access_token']

@app.route('/webhook', methods=['POST'])
def webhook():
    req = request.get_json()
    intent_name = req['queryResult']['intent']['displayName']
    
    if intent_name == 'AddToEBayCart':
        product_name = req['queryResult']['parameters']['product-name']
        token = get_ebay_token()
        
        # 搜索用户要的商品
        search_params = {"q": product_name, "limit": 1}
        search_res = requests.get(EBAY_SEARCH_URL, params=search_params, headers={
            "Authorization": f"Bearer {token}"
        })
        product = search_res.json()['itemSummaries'][0]
        item_id = product['itemId']
        
        # 添加到购物车
        add_payload = {"itemId": item_id, "quantity": 1}
        add_res = requests.post(EBAY_ADD_CART_URL, json=add_payload, headers={
            "Authorization": f"Bearer {token}",
            "Content-Type": "application/json"
        })
        
        if add_res.status_code == 200:
            fulfillment_text = f"已经把「{product['title']}」添加到你的eBay购物车啦!"
        else:
            fulfillment_text = "抱歉,添加商品失败了,麻烦再试一次?"
        
        return jsonify({'fulfillmentText': fulfillment_text})
    
    return jsonify({'fulfillmentText': "我暂时帮不了你这个忙哦😅"})

if __name__ == '__main__':
    app.run(port=4000, debug=True)
几个关键注意事项
  • API合规性:每个平台的API都有使用限制和合规要求,比如Domino's的API可能只针对特定地区,Expedia需要合作伙伴资质,一定要严格按照官方文档来,别违规导致API被封
  • 错误处理:Webhook里一定要处理API调用失败的情况(比如网络错误、参数错误),返回友好的提示给用户,别让机器人卡壳
  • 多轮对话设计:像机票预订这种复杂流程,一定要用Dialogflow的上下文来保存中间数据,一步步引导用户完成所有必要信息的输入
  • 服务部署:Webhook服务必须能被公网访问,用云服务平台(Heroku、AWS Lambda、Google Cloud Functions)的免费额度足够支撑小项目

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:26:58