「広告」

ワードプレス、ContactForm7の内容を、LineWorksに。API2.0版

「広告」
記事内に広告が含まれています。
「広告」

ワードプレスの「お問い合わせ」内容を、LineWorksのトークルームで受信をして、複数人で共有するという方法です。

ワードプレスの「ContactForm7」+「phpプログラム」で実現しています。

LineWorks API 2.0 版です。

API1.0版は、

ワードプレス、ContactForm7の内容を、LineWorksに
現場では、「LineWorks」が使われている場合があります。わざわざメールをチェックしなくても、「LineWorks」に通知されると便利です。今回は、ContactForm7 + phpプログラムでやってみたいと思います。↑ API 2....

になります。

「広告」

Line works のアカウントを作成します。

↑ line worksの画面、右上の「ログイン」を押します。

↑ 下の「管理者として新規開設」を押します

↑ 「管理者として新規開設を押して、いくつかの質問に答えてアカウントを登録します。

「広告」

「Bot」を登録

https://developers.worksmobile.com/jp/
「LINE WORKS Developers」に入ります。

↑ LINE WORKS Developer Console に入りました。

↑ 左メニュー「Bot」を選びます。

「登録」のボタンを押します。

↑ 登録画面になります。

プロフィール画像は、linework上に表示されますので、わかりやすい画像にすると混乱が少ないです。
今回、ワードプレスのロゴを入れてみました。

「bot名」も、lineworks上に表示されますので、わかりやすい名称がいいかと思います。
「説明」は、ご自身の説明を入れます。
「複数人のトークルーム招待可」にチェックを入れます。
「主担当」は、ログインしている管理者を、設定するといいかと思います。

↑ 登録されました。
注意事項には、以下のような説明がなされています。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
Botがテナントに登録されました。管理者画面からBotのドメイン登録を行い公開すると、メンバーのアドレス帳に表示されるようになります。
登録したBotは、管理者画面での追加およびメンバーへの公開前に十分にテストを行ってください。
Botがテナントに登録されました。管理者画面からBotのドメイン登録を行い公開すると、メンバーのアドレス帳に表示されるようになります。 登録したBotは、管理者画面での追加およびメンバーへの公開前に十分にテストを行ってください。
Botがテナントに登録されました。管理者画面からBotのドメイン登録を行い公開すると、メンバーのアドレス帳に表示されるようになります。
登録したBotは、管理者画面での追加およびメンバーへの公開前に十分にテストを行ってください。

↑ 登録されました。

「広告」

botのサービス登録

https://admin.worksmobile.com/
「LINE WORKS Admin」に入ります。

↑「サービス」の「bot」を選びます。

↑ 右上、「Bot追加」を選びます。

↑ さきほど、登録したbotが表示されています。

↑ チェックを入れて、画面右側の「追加」を押します。

↑ 追加されたとのメッセージが出ます。

↑ LINE WORKS Developer Console の「Bot」のメニュー、「サービス中」になりました。

↑ LINE WORKS Admin のほうの「Bot」で、追加した「wp-contact」のbotに、鍵がかかっており、非公開に
なっていますので、これを公開にしたいと思います。鍵の左の「wp-contac」の文字をクリックします。

↑ 右下、修正を押します。

↑ 下、「公開設定」を押して、公開にして、「保存」を押します。

↑ 鍵がなくなり、公開されました。

↑ LINE WORKS トーク の管理画面で、上記のようなサービス通知がなされました。

「広告」

「API」を作成

https://developers.worksmobile.com/jp/
「LINE WORKS Developers」に入ります。

↑ 左メニュー、「API」を選び、「アプリの新規追加」を押します。
アプリ名を適当な名前で、登録します。

↑ 「OAuth Scopes」の「管理」を押します

↑ 「bot」と「bot.read」を選び、「保存」を押します。

↑ この画面に戻り、再び、「保存」を押します。

↑ 「Service Account」のところで、「発行」を押します。

↑ 「Private key」の「発行 / 再発行」を押します。

↑ 上記のような画面が出てきます。

private_(数字).keyをダウンロードします。

「広告」

LineWorksのトークルームへの招待

トークルームに、wordpressの問い合わせ内容が通知されるために、希望のトークルームに「bot」を招待します。

↑ 招待したいトークルームを選び、右上のメニューから、「招待」を選びます

↑「Bot」のタブから、設定をした「wp-contact」を選び、右下の「OK」を押します。

「Bot」タブがない場合

↑ 上記のように、「Bot」のタブがない場合があります。
原因は、以下のいずれか(1~3)かと思います。

「外部トーク連携」をしているトークルームには、招待できない。

「外部トーク連携」とは、「LINEユーザ」を招待しているトークルームです。

↑「Bot」の右側、「外部」のタブから招待しているユーザがいたら、「Bot」は招待できません。
API 1.0 の時は、できたような気がするのですが、今は(API 2.0 は)、できないようです。

外部トーク連携しているトークルームにBotを招待できるのか
### 前提・実現したいこと 外部トーク連携しているトークルームにBotを招待したい ### 発生している問題・エラーメッセージ - 外部ユーザーを招待すると以下のメッセージが出てBotが共存できない ``` XXX BotさんはLINE連...

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
多数人トークルームではBotを招待できるものの・・・
外部ユーザーとのトークルームはできないかと。
多数人トークルームではBotを招待できるものの・・・ 外部ユーザーとのトークルームはできないかと。
多数人トークルームではBotを招待できるものの・・・
外部ユーザーとのトークルームはできないかと。

「複数人のトークルームに参加可」

「公開設定」を公開にする

上記は、2つとも、設定時により、変更ができます。

↑ トークルーム、右上のメニューから、一番下の「チャンネルID」を選びます。

↑ 英数字が、「-」でつながった、文字列です。

「広告」

Guzzle Http インストール

ワードプレス、ContactForm7の内容を、LineWorksに
現場では、「LineWorks」が使われている場合があります。わざわざメールをチェックしなくても、「LineWorks」に通知されると便利です。今回は、ContactForm7 + phpプログラムでやってみたいと思います。↑ API 2....

↑ 上記を参考にしてください。

「広告」

JWTライブラリの設置

ワードプレス、ContactForm7の内容を、LineWorksに
現場では、「LineWorks」が使われている場合があります。わざわざメールをチェックしなくても、「LineWorks」に通知されると便利です。今回は、ContactForm7 + phpプログラムでやってみたいと思います。↑ API 2....

↑ 上記を参考にしてください。

「広告」

プログラム

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
<?php
require_once 'jwt/src/BeforeValidException.php';
require_once 'jwt/src/ExpiredException.php';
require_once 'jwt/src/SignatureInvalidException.php';
require_once 'jwt/src/JWT.php';
use \Firebase\JWT\JWT;
require_once 'vendor/autoload.php';
use GuzzleHttp\Client;
$key = "(★1の内容を入れる(複数行、英数字、記号))";
$ClientID = "(★2の「Client ID」を入れる(英数字、記号))";
function get_jwt(){
global $key,$ClientID;
$ServiceAccount = "(★3の「Service Account」を入れる(英数字、記号))";
$header = '{"alg":"RS256","typ":"JWT"}';
$header = base64_encode($header);
$header = str_replace(array('+','/','='), array('-','_',''), $header);
$body = ['iss'=>"$ClientID",
'sub'=>"$ServiceAccount",
'iat'=>time(),
'exp'=>time()+1800
];
$body = json_encode($body);
$body = base64_encode($body);
$body = str_replace(array('+', '/', '='), array('-', '_', ''), $body);
$data = $header.".".$body;
openssl_sign($data, $signature, $key, OPENSSL_ALGO_SHA256);
$signature = base64_encode($signature);
$signature = str_replace(array('+', '/', '='), array('-', '_', ''), $signature);
$jwt = $header . "." . $body . "." . $signature;
return $jwt;
}
function get_form_mes(){
$submission = WPCF7_Submission::get_instance();
if($submission) {
$fm7 = $submission->get_posted_data();
$mes = "氏名\n" . $fm7['your-name'] . "\n\n";
$mes .= "メールアドレス\n" . $fm7['your-email'] . "\n\n";
$mes .= "題名\n" . $fm7['your-subject'] . "\n\n";
$mes .= "メッセージ本文\n" . $fm7['your-message'] . "\n\n";
}
return $mes;
}
function getAccessToken($jwttoken){
global $ClientID;
$secret = "(★2の、「Client Secret」を入れる(英数字、記号))";
$url = "https://auth.worksmobile.com/oauth2/v2.0/token";
$options = [
'form_params' => [
"grant_type" => urlencode("urn:ietf:params:oauth:grant-type:jwt-bearer"),
"assertion" => $jwttoken,
"client_id" => $ClientID,
"client_secret" => $secret,
"scope" => "bot"
],
'headers' => [
'Content-Type' => 'application/x-www-form-urlencoded'
]
];
$client = new Client();
$response = $client->request("POST", $url, $options);
$status = (string) $response->getStatusCode();
$body = $response->getBody();
$json = json_decode($body, true);
return $json["access_token"];
}
function send_mes(){
$botno = '(★4の「Bot No.」の数字)';
$cahnnelID = "(★5の「チャンネルID」を入れます(英数字、記号))";
$message = get_form_mes();
$jwt = get_jwt();
$token_now = getAccessToken($jwt);
$url = "https://www.worksapis.com/v1.0/bots/$botno/channels/$cahnnelID/messages";
$options = [
'json' => [
"content" => [
"type" => "text",
"text" => $message
]
],
'headers' => [
'Content-Type' => 'application/json',
'Authorization' => "Bearer $token_now"
]
];
$client = new Client();
$response = $client->request("POST", $url, $options);
}
?>
<?php require_once 'jwt/src/BeforeValidException.php'; require_once 'jwt/src/ExpiredException.php'; require_once 'jwt/src/SignatureInvalidException.php'; require_once 'jwt/src/JWT.php'; use \Firebase\JWT\JWT; require_once 'vendor/autoload.php'; use GuzzleHttp\Client; $key = "(★1の内容を入れる(複数行、英数字、記号))"; $ClientID = "(★2の「Client ID」を入れる(英数字、記号))"; function get_jwt(){ global $key,$ClientID; $ServiceAccount = "(★3の「Service Account」を入れる(英数字、記号))"; $header = '{"alg":"RS256","typ":"JWT"}'; $header = base64_encode($header); $header = str_replace(array('+','/','='), array('-','_',''), $header); $body = ['iss'=>"$ClientID", 'sub'=>"$ServiceAccount", 'iat'=>time(), 'exp'=>time()+1800 ]; $body = json_encode($body); $body = base64_encode($body); $body = str_replace(array('+', '/', '='), array('-', '_', ''), $body); $data = $header.".".$body; openssl_sign($data, $signature, $key, OPENSSL_ALGO_SHA256); $signature = base64_encode($signature); $signature = str_replace(array('+', '/', '='), array('-', '_', ''), $signature); $jwt = $header . "." . $body . "." . $signature; return $jwt; } function get_form_mes(){ $submission = WPCF7_Submission::get_instance(); if($submission) { $fm7 = $submission->get_posted_data(); $mes = "氏名\n" . $fm7['your-name'] . "\n\n"; $mes .= "メールアドレス\n" . $fm7['your-email'] . "\n\n"; $mes .= "題名\n" . $fm7['your-subject'] . "\n\n"; $mes .= "メッセージ本文\n" . $fm7['your-message'] . "\n\n"; } return $mes; } function getAccessToken($jwttoken){ global $ClientID; $secret = "(★2の、「Client Secret」を入れる(英数字、記号))"; $url = "https://auth.worksmobile.com/oauth2/v2.0/token"; $options = [ 'form_params' => [ "grant_type" => urlencode("urn:ietf:params:oauth:grant-type:jwt-bearer"), "assertion" => $jwttoken, "client_id" => $ClientID, "client_secret" => $secret, "scope" => "bot" ], 'headers' => [ 'Content-Type' => 'application/x-www-form-urlencoded' ] ]; $client = new Client(); $response = $client->request("POST", $url, $options); $status = (string) $response->getStatusCode(); $body = $response->getBody(); $json = json_decode($body, true); return $json["access_token"]; } function send_mes(){ $botno = '(★4の「Bot No.」の数字)'; $cahnnelID = "(★5の「チャンネルID」を入れます(英数字、記号))"; $message = get_form_mes(); $jwt = get_jwt(); $token_now = getAccessToken($jwt); $url = "https://www.worksapis.com/v1.0/bots/$botno/channels/$cahnnelID/messages"; $options = [ 'json' => [ "content" => [ "type" => "text", "text" => $message ] ], 'headers' => [ 'Content-Type' => 'application/json', 'Authorization' => "Bearer $token_now" ] ]; $client = new Client(); $response = $client->request("POST", $url, $options); } ?>
<?php

require_once 'jwt/src/BeforeValidException.php';
require_once 'jwt/src/ExpiredException.php';
require_once 'jwt/src/SignatureInvalidException.php';
require_once 'jwt/src/JWT.php';

use \Firebase\JWT\JWT;

require_once 'vendor/autoload.php';
use GuzzleHttp\Client;


$key = "(★1の内容を入れる(複数行、英数字、記号))";


$ClientID = "(★2の「Client ID」を入れる(英数字、記号))";


function get_jwt(){

    global $key,$ClientID;


    $ServiceAccount = "(★3の「Service Account」を入れる(英数字、記号))";

    $header = '{"alg":"RS256","typ":"JWT"}';
    $header = base64_encode($header);
    $header = str_replace(array('+','/','='), array('-','_',''), $header);


    $body = ['iss'=>"$ClientID",
          'sub'=>"$ServiceAccount",
          'iat'=>time(),
          'exp'=>time()+1800
        ];
    $body = json_encode($body);
    $body = base64_encode($body);
    $body = str_replace(array('+', '/', '='), array('-', '_', ''), $body);



    $data = $header.".".$body;

    openssl_sign($data, $signature, $key, OPENSSL_ALGO_SHA256);

    $signature = base64_encode($signature);
    $signature = str_replace(array('+', '/', '='), array('-', '_', ''), $signature);

    $jwt =  $header . "." . $body . "." . $signature;

    return $jwt;

}


function get_form_mes(){
        $submission = WPCF7_Submission::get_instance();
        if($submission) {
                $fm7 = $submission->get_posted_data();
                $mes = "氏名\n" . $fm7['your-name'] . "\n\n";
                $mes .= "メールアドレス\n" . $fm7['your-email'] . "\n\n";
                $mes .= "題名\n" . $fm7['your-subject'] . "\n\n";
                $mes .= "メッセージ本文\n" . $fm7['your-message'] . "\n\n";
        }
        return $mes;
}



function getAccessToken($jwttoken){
    
    global $ClientID;

    $secret = "(★2の、「Client Secret」を入れる(英数字、記号))";


    $url = "https://auth.worksmobile.com/oauth2/v2.0/token";
    $options = [
        'form_params' => [
            "grant_type" => urlencode("urn:ietf:params:oauth:grant-type:jwt-bearer"),
            "assertion" => $jwttoken,
            "client_id" => $ClientID,
            "client_secret" => $secret,
            "scope" => "bot"
        ],
        'headers' => [
            'Content-Type' => 'application/x-www-form-urlencoded'
        ]
    ];
    $client = new Client();
    $response = $client->request("POST", $url, $options);
    $status = (string) $response->getStatusCode();
    $body = $response->getBody();
    $json = json_decode($body, true);

    return $json["access_token"];
}


function send_mes(){
    
    $botno = '(★4の「Bot No.」の数字)';
    $cahnnelID = "(★5の「チャンネルID」を入れます(英数字、記号))";

    $message = get_form_mes();

    $jwt = get_jwt();

    $token_now = getAccessToken($jwt);


    $url = "https://www.worksapis.com/v1.0/bots/$botno/channels/$cahnnelID/messages";
    $options = [
        'json' => [
            "content" => [
                "type" => "text",
                "text" => $message
            ]
        ],
        'headers' => [
            'Content-Type' => 'application/json',
            'Authorization' => "Bearer $token_now"
        ]
    ];
    $client = new Client();
    $response = $client->request("POST", $url, $options);

}

?>

 

「広告」

ワードプレストの連携

該当wordpressの「function.php」に
以下の2行を入れます。lineworks.phpは、前述のプログラムを保存したファイル名です。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
require get_template_directory() . '/lineworks.php';
add_action('wpcf7_mail_sent', 'send_mes', 10, 1);
require get_template_directory() . '/lineworks.php'; add_action('wpcf7_mail_sent', 'send_mes', 10, 1);
require get_template_directory() . '/lineworks.php';
add_action('wpcf7_mail_sent', 'send_mes', 10, 1);
「広告」

実際にやってみる

お問い合わせフォームから、送信すると

↑ トークルームに書き込まれました。

タイトルとURLをコピーしました