【Python】LINEWORKSで特定のユーザーにメッセージ送信 

# はじめに
LINEWORKSではLINEと違ってメッセージを送信するにはサーバー必須なので、
AWS EC2等のクラウドサーバーを各自用意します。
**注意**
**固定されたグローバルIPが必要になりますのでEC2ならElasticIPが必要となります**

### 動作確認済み環境
AWS EC2 (t2.micro Windows Server Base)
Python 3.8
LINEWORKS (無料版)



### https://developers.worksmobile.com/jp/document/1002002?lang=ja
###上記URLと本記事を参考にしながら進めると良いかと思います
# ①[Developer Console](https://developers.worksmobile.com/console)にアクセス

### ※権限がない場合
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/535228/dbecd7e2-9e18-736e-11b9-5cfde6c138e6.png)
### 管理者権限を持っているアカウントで管理者画面を開く
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/535228/5285f92c-a957-54bc-5658-a25e151874a6.png)
### 管理者権限へ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/535228/7416a760-4bf8-fcdd-8162-b64f5cf3b11e.png)
### 権限の中からサービスに「Bot」監査に「DeveloperConsole」があるかを確認
### 本記事ではBOTの管理者に副管理者権限を渡していますが、有料版LINEWORKSをお使いであれば権限を作成する方が安全です
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/535228/94c4eb74-5c4c-5b00-20c9-2dd5b7b6585d.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/535228/7ef4e01d-1f56-5423-dfa8-725dd79b3d37.png)
### 管理者追加
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/535228/2e795a99-3568-4838-27a1-7c3430131595.png)

### ①[Developer Console](https://developers.worksmobile.com/console)にアクセスして開けるか確認します
### ※権限反映までに15分程時間がかかりました




# ②LINE WORKS APIサービス利用規約に同意する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/535228/0c625e9b-b514-e7e5-c303-d624fc9b0b02.png)

# ③API IDを発行する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/535228/496d9cb6-8b9b-ac89-3f58-c8431502f4c1.png)
# ④Server API Consumer Keyを発行する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/535228/1e90160c-82a0-5983-143c-4025eb81982b.png)
### ↓
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/535228/cd786e36-eee9-add8-86bd-a2403763f07c.png)
### ↓
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/535228/42a7daa5-9d67-50cf-24bc-b08fa2c94942.png)
### 有効期間は要考慮
### 7日に設定した場合（最後にTOKENが使用されてから7日後に満了となってしまいます）
### 一定期間TOKENを使用しない懸念があるのなら少し日付を伸ばしたほうがよいかもしれません
（毎日後述のコードでTOKENを使用してメッセージを送るのであれば7日でも問題ありません）
（TOKENを使用する度に有効期間は7日延長されていきます）
# ③Server Tokenを発行する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/535228/88657886-b426-fc74-03a6-bcf08c26c921.png)
↓
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/535228/86e383f6-147e-5ded-f6d0-d99c28a4350c.png)
サーバー名：任意
Keyの選択：Server API Consumer Keyを選択
IP：AWSのElastic IP(グローバルIP）を選択
TOKEN：発行ボタンを押したらTOKENが発行される

# ④BOT登録を行う
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/535228/f87aaaeb-b568-3194-a489-aeacc9e1bdaa.png)
### ↓
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/535228/de0e9d25-9c81-72d5-fc40-94839afa61f6.png)

### ↓
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/535228/9afb7050-1baf-7cff-9250-b5c79ea76699.png)
### ↓
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/535228/24749a70-a3e0-73fc-83a3-bea831feff8c.png)
### ↓ 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/535228/c9d2e759-001b-2844-f756-6dc0acfa3659.png)
### 追加後にBOT編集を行い公開をします


# 準備完了！
あとは下記情報を用意します。
API ID
Server API Consumer Key
Server Token
botNo
user ID (送り先UserID）

```python:main.py
import json, requests

API_ID = r'ABC'
SERVER_API_CONSUMER_KEY = r'ABC'
SERVER_TOKEN = r'ABC'
BOT_NO = 123  # 数値で指定

USER_ID=r'test@test'  # 送り先


url = 'https://apis.worksmobile.com/' + API_ID + '/message/sendMessage/v2'
headers = {
    'Content-Type': 'application/json; charset=UTF-8',
    'consumerKey': SERVER_API_CONSUMER_KEY,
    'Authorization': 'Bearer ' + SERVER_TOKEN
}
payload = {
    'botNo': BOT_NO,
    'accountId': USER_ID,
    'content': {
        'type': 'text',
        'text': 'テストメッセージ'
     }
}

r = requests.post(url, data=json.dumps(payload), headers=headers)

status_code = r.status_code
content = json.loads(r.content)

if status_code != 200 or 'errorMessage' in content.keys():
    print("送信に失敗")
    print(content["errorMessage"])
else:
    print("送信成功")

```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/535228/e67e8835-68c7-3f05-1f70-95ebdae84434.png)
### BOTからメッセージが送られてきているのを確認


# PS 送り先ユーザーIDの確認方法
### 連絡先からIDを確認したいユーザーを選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/535228/b7682b01-536f-de68-e69b-7d13c19bd8e6.png)


参考にさせて頂きました。
https://qiita.com/iwaohig/items/b0c05125e8d31b44a442