官方文档 里是这么说的:
如果小程序设置了消息推送,普通微信用户向小程序客服发消息时,微信服务器会先将消息 POST 到开发者填写的 url 上,如果希望将消息转发到网页版客服工具,则需要开发者在响应包中返回 MsgType 为 transfer_customer_service 的消息,微信服务器收到响应后会把当次发送的消息转发至客服系统。
{
"ToUserName": "touser",
"FromUserName": "fromuser",
"CreateTime": "1504490042",
"MsgType": "transfer_customer_service"
}
第一感觉就是把上面这个响应通过 发送消息 的接口发给微信服务器。
后来才发现错的太离谱了。搜了下 transfer_customer_service 这个关键词,基本都是转载官方的更新记录,没找到实例。
事实上,就如同文档所说,在响应包中返回,示例如下:
public function main(Request $request)
{
$msg = $request->json()->all();
if ($msg['MsgType'] == 'text' || $msg['MsgType'] == 'image') {
// 5 分钟内只回复一次
$now = time();
if ($now - cache($msg['FromUserName']) > 300) {
cache([$msg['FromUserName'] => $now], 5);
$this->sendMessage('balabala...');
}
// 转发到官方客服系统
$data = [
'ToUserName' => $msg['FromUserName'], // 用户 OpenID
'FromUserName' => $msg['ToUserName'], // 小程序 ID
'CreateTime' => $msg['CreateTime'],
'MsgType' => 'transfer_customer_service'
];
return json_encode($data);
}
return 'success';
}
用户发多条信息过来,自动回复只回复一次,不会太烦,同时,把用户的消息转发给网页客服工具。