目录
1 介绍的背景
提高客户的便利性和客户满意度
重要的通知,如Woocommerce “新的购买”,”流程完成 “和 “取消”,可以发送到Line。
这就避免了一些问题,如通知没有被发送到电子邮件地址,或被埋在邮箱里而错过,从而提高了客户满意度。
提高服务认可度和忠诚度
这项服务有望通过向官方LINE账户添加好友和发送高度重要的信息,提高对官方LINE账户的认可度和忠诚度。
由于匹配是基于电话号码,并且可以在添加朋友之前传递给用户,因此也可以用来创造一个添加朋友的机会。
2 使用LINE通知信息的条件
建立一个官方的Line账户(@line)。
Line的新业务支持服务–LINE官方账号,可以让您直接向通过LINE添加您为好友的用户发送信息。这是一项慷慨的服务,允许你与用户沟通而不获取他们的个人信息。
关于如何设置这项服务的更多信息,请参考Line官方网站。
开始使用Messaging API
开设“Line官方账户 “后,在设置好聊天模式后,您可以像往常一样通过Line与用户聊天,但为了实现从Woocommerce收到订单后的自动通知,您必须设置Messaging API。
开始使用Messaging API和获得通道访问令牌并不是本次讲解的重点,更详细的信息请参考Line的官方网站。
3 触发线路通知的条件
WordPress的必要插件。
Woocommerce 在全球电子商务网站中占有20%的份额,现在已经成为电子商务市场中不可缺少的一部分。
您将需要LINE Messaging API SDK ,它结合了Messaging API,但这里推荐使用Line Connect。
使用钩子动作(woocommerce_email_sent)来执行每次订单状态变化时的电子邮件通知,从Woocommerce的新订单到完成的订单,甚至取消的订单,并调用Line Messaging API。
在客户端(用户)的一个行动中发出电子收据通知
从管理员方面通知行动中的电子收据
实施挂钩行动
在这里使用Line Connect,它具有向Line发送所需的Messaging API SKD。这个插件有很好的功能,如发帖时向Line发出通知,以及在机器人模式下与Line整合。我们鼓励你使用它。
add_action('woocommerce_email_sent', 'kure_customize_woocommerce_email_sent', 10, 3);
function kure_customize_woocommerce_email_sent($return, $id, $mailer)
{
// Line Connect & Easy Line login(KURE製) が必須
if (!class_exists('lineconnectMessage') || !function_exists('Esay_line_login')) {
return;
}
$line_messager_class_path = KURE_DIR_CLASS . "kure_customize_line_receipt.php";
if (!file_exists($line_messager_class_path)) {
return;
}
if (!did_action('woocommerce_email_order_details')) {
return;
}
try {
if (!isset($mailer->object) || !($mailer->object instanceof WC_Order)) {
return;
}
$order = $mailer->object;
// 注文のユーザーからLine Idを取得
if (!Esay_line_login()->has_line($order->get_user(), $line_id)) {
return;
}
static $is_sent;
if (isset($is_sent[$line_id]) && $is_sent[$line_id] == $order->get_order_number()) {
// 連続送信しない
return;
}
// メールの送信先が違い、同じオーダーで2回送信されることがある為、重複Line通知を回避
$is_sent[$line_id] = $order->get_order_number();
/** @var kure_customize_line_receipt */
$line_messager = include $line_messager_class_path;
foreach (lineconnect::get_all_channels() as $channel) {
// send_order_roleはKUREがカスタマイズした設定項目
if (empty($channel['send_order_role']) || !in_array($channel['send_order_role'], $line_role_names)) {
// 指定された通知対象か
continue;
}
$error = lineconnectMessage::sendPushMessage($channel, $line_id, $line_messager);
// 一方通行の為、ブロック中のユーザかどうか分からないです。その時、Webhookの配信完了イベントにて送信結果を拾う必要があるが、チャットモードの場合、Webhookが利用できない
// https://developers.line.biz/ja/docs/partner-docs/line-notification-messages/message-sending-complete-webhook-event/#overview-delivery-webhook-event
if ($error["success"]) {
// 一度成功したら、複数回の通知を実施しないよう、中断
break;
}
}
} catch (Throwable $th) {
//すべての例外を無視
}
}
4 将Flex Message JSON发送到Messaging API。
可以发送到Messaging API那边的模板消息被称为Flex消息。你可以自由设计,只要使用指定的JSON布局。
有各种工具可以提供Flex Message设计,但由于我们没有收费,我们依靠Line公司的手册来创建我们自己的设计。
首先,从Line Developers Flex Message Simulator中找到一个类似收据的模板,然后安排JSON。
下面是整理后的JSON。
安排JSON后的BODY
"type": "bubble",
"body": {
"type": "box",
"layout": "vertical",
"contents": [
{
"type": "box",
"layout": "horizontal",
"contents": [
{
"type": "image",
"url": "{site_logo}",
"align": "start"
},
{
"type": "text",
"text": "{order_status}",
"weight": "bold",
"color": "#1DB446",
"size": "sm",
"align": "end",
"gravity": "center"
}
]
},
{
"type": "text",
"text": "{order_title}",
"weight": "bold",
"size": "xxl",
"margin": "md",
"decoration": "underline",
"action": {
"type": "uri",
"label": "action",
"uri": "{order_link}"
}
},
{
"type": "text",
"text": "{order_address}",
"size": "xs",
"color": "#aaaaaa",
"wrap": true
},
{
"type": "separator",
"margin": "xxl"
},
{
"type": "box",
"layout": "vertical",
"margin": "xxl",
"spacing": "sm",
"contents": [
{order_items},
{
"type": "separator",
"margin": "xxl"
},
{order_total}
]
},
{
"type": "separator",
"margin": "xxl"
},
{
"type": "box",
"layout": "horizontal",
"margin": "md",
"contents": [
{
"type": "text",
"text": "{order_note}",
"size": "xs",
"color": "#aaaaaa",
"wrap": true
}
]
}
]
},
"styles": {
"footer": {
"separator": true
}
}
*”{order_NNN}”:表示str_replace的关键词。
详细项目(含URL) JSON
"type": "box",
"layout": "horizontal",
"contents": [
{
"type": "text",
"text": "{item_title}",
"size": "sm",
"color": "#555555",
"flex": 0,
"action": {
"type": "uri",
"label": "action",
"uri": "{item_link}"
}
},
{
"type": "text",
"text": "{item_value}",
"size": "sm",
"color": "#111111",
"align": "end"
}
]
详细项目 JSON
"type": "box",
"layout": "horizontal",
"contents": [
{
"type": "text",
"text": "{item_title}",
"size": "sm",
"color": "#555555",
"flex": 0
},
{
"type": "text",
"text": "{item_value}",
"size": "sm",
"color": "#111111",
"align": "end"
}
]
安排点
- 显示网站图标
- 显示订单状态
- 订单号显示在页眉,URL被嵌入以重定向到相关的订单历史。
- 订单细节(产品清单)也会自动生成,并嵌入URL以重定向到相关产品。
- 显示总价、运费和支付方式,以及woocommerce订单历史的页脚字段。
- 同时显示管理员添加的备注(订单备注)。
下面是一些源代码。
输出订单的产品细节
生成一个字符串,并在BODYJSON中用”{order_items}”替换它。
// 注文商品を出力
foreach ($this->order->get_items() as $item_id => $item) {
if ($item instanceof WC_Order_Item_Product) {
$product = $item->get_product();
$json_items[] = $this->create_items_with_link(
$product->get_name(), // {item_title} 商品名
$product->get_permalink(), // {item_link} 商品へのリダイレクトする為、リンクを埋め込む
$this->order->get_formatted_line_subtotal($item) // {item_value} 値段
);
} else {
// 基本的にProduct以外のItemがないですが、Product Addons & Optionsなどプラグインを導入している場合、該当分岐に入る
$json_items[] = $this->create_items_no_link(
$item->get_name(),
$this->order->get_formatted_line_subtotal($item)
);
}
}
总金额的输出
生成一个字符串,并在BODYJSON中替换为”{order_total}”。
$faqurl = $this->get_order_payment_faqurl(); // 決済方法の案内(よくある質問)ページ
// 金額、送料など出力
foreach ($this->order->get_order_item_totals() as $item_id => $item) {
if ($item_id === 'payment_method' && !empty($faqurl)) {
$json_total[] = $this->create_items_with_link(
$item['label'],
$faqurl, // 決済方法へのリダイレクトを埋め込む
$item['value'],
);
} else {
$json_total[] = $this->create_items_no_link(
$item['label'],
$item['value']
);
}
}
笔记的输出(订单笔记)
备注(订单备注)可以在woocommerce订单编辑的管理界面上添加。有两种类型的说明:管理员的说明和通知客户的说明。对客户的通知也会输出到电子收据上。
由于字段是手动输入的,因此可以自由输入符号。如果包含双引号或特殊符号,JSON字符串将产生一个错误。因此,它们被提前删除以防止JSON错误。
private function get_order_notes()
{
$notes = array();
foreach ($this->order->get_customer_order_notes() as $ext_note) {
if ($ext_note instanceof WP_Comment) {
// 日付 + 内容、wptexturizeにて特殊記号を有効な文字へ変換
$notes[] = date_i18n(get_option('date_format'), strtotime($ext_note->comment_date)) . ' ' . wptexturize($ext_note->comment_content);
}
}
$notes = array_filter(array_map('trim', $notes));
$str_notes = $this->del_specialchars(implode('n', $notes));
if (empty($str_notes)) {
// 空欄だと、Line側でエラーが発生する為、ノートがない場合も内容を設定
$str_notes = '注文メモなし';
}
return $str_notes;
}
private function del_specialchars($text)
{
$text = html_entity_decode(wp_strip_all_tags($text));
// json の 変換でエラーにならないよう、ダブルコーテーションをなくす
$text = str_replace(
['"', "'"],
' ',
$text
);
return $text;
}
5 结论。
仅在日本,Line就拥有9300万用户。众多公司和政府组织也利用Line向其用户传播信息。这个世界太伟大了,不能忽视Line。当然,对作者来说也是如此。
作者多年来致力于克拉萨巴的发展。由于Corona,他有更多时间呆在家里,从2022年开始对Line + WordPress感兴趣,并继续接受挑战。我仍然是个新手,但我很乐意为尽可能多的人/开发者提供帮助,哪怕只是一个小的方面。我将在未来继续挑战自己,请大家期待。
如果你有任何问题或建议,请登录并留下评论。