メールトリガーでUiPath Orchestratorのジョブを実行する方法
RPAエンジニア 大庭
普段の業務の中で、ある条件に当てはまるメールを受信したときにUiPath Orchestratorにある特定のプロセスのジョブを実行したい場合があると思います。今回はOutlook VBAを使ってメール受信をトリガーにしてジョブを実行する方法をご紹介します。
前提として、Microsoft Outlookでマクロを編集できるようにしておいたり、マクロに自己署名をつけておく必要があります。
メインのプロシージャのコードは下記のようになります。
Private Sub Application_NewMailEx(ByVal EntryIDCollection As String)
Const TASK_SUBJECT = "メールの件名"
Const PROCESS_NAME = "UiPath Orchestrator上のプロセス名"
Dim MailMessage
Dim Token As String, ReleaseKey As String
Set MailMessage = Session.GetItemFromID(EntryIDCollection)
If InStr(MailMessage.Subject, TASK_SUBJECT) <> 0 Then
Token = UiPath_Authenticating 'アクセストークンを取得するプロシージャを実行して戻り値を格納
ReleaseKey = UiPath_RequestReleaseKey(Token, PROCESS_NAME) 'リリースキーを取得するプロシージャを実行して戻り値を格納
UiPath_StartJob Token, ReleaseKey 'ジョブの実行を命令するプロシージャを実行
End If
End Sub
このプロシージャは、指定したメールの件名が受信したメールの件名に含まれていたときに、指定したプロセス名のジョブを実行する命令をOrchestratorに対して行います。送信元を指定したり本文に特定の文字列が含まれている場合などを条件にしたいときはIf文の条件を適宜修正してください。
注意点として、このプロシージャはメールを受信したときに実行されるので、Outlookを常に起動させておく必要があります。
また、ジョブを実行するにはいくつかの段階を踏む必要があります。
まず、アクセストークンを取得します(上記コードのUiPath_Authenticatingプロシージャ)。
次にそのアクセストークンでプロセスのリリースキーを取得します(上記コードのUiPath_RequestReleaseKeyプロシージャ)。
最後にアクセストークンとリリースキーでプロセスのジョブを実行する命令をします(上記コードのUiPath_StartJobプロシージャ)。
以下はそれぞれの段階に対応するプロシージャのコードです。
アクセストークンの取得(UiPath_Authenticating)
Function UiPath_Authenticating() As String
Dim sURL As String, sHTML As String, Body As String, Token As String
Dim oHttp As Object
Dim Doc, JsonObject
Set oHttp = CreateObject("MSXML2.ServerXMLHTTP")
sURL = "https://account.uipath.com/oauth/token"
oHttp.Open "POST", sURL, False
oHttp.setRequestHeader "Content-type", "application/json"
oHttp.setRequestHeader "X-UIPATH-TenantName", "テナント名"
Body = "{""grant_type"" : ""refresh_token"",""client_id"" : ""クライアントID"",""refresh_token"" : ""リフレッシュトークン""}"
oHttp.Send Body
sHTML = oHttp.ResponseText
Set Doc = CreateObject("HtmlFile")
Doc.Write "<script>document.JsonParse=function (s) {return eval('(' + s + ')');}</script>"
Set JsonObject = Doc.JsonParse(sHTML)
Token = CallByName(JsonObject, "access_token", VbGet)
UiPath_Authenticating = Token
End Function
トークン取得の要求を行い、その応答をJSONオブジェクトにしてその中からアクセストークンを取得しています。
リリースキーの取得(UiPath_RequestReleaseKey)
Function UiPath_RequestReleaseKey(ByVal Token As String, ByVal ProjectName As String) As String
Dim sURL As String, sHTML As String, Body As String, ReleaseKey As String
Dim oHttp As Object
Dim Doc, JsonObject, Value, item
Dim i As Long
Set oHttp = CreateObject("MSXML2.ServerXMLHTTP")
sURL = "リリースキー取得APIのURL"
oHttp.Open "GET", sURL, False
oHttp.setRequestHeader "Content-type", "application/json"
oHttp.setRequestHeader "X-UIPATH-TenantName", "テナント名"
oHttp.setRequestHeader "Authorization", "Bearer " & Token
oHttp.Send
sHTML = oHttp.ResponseText
Set Doc = CreateObject("HtmlFile")
Doc.Write "<script>document.JsonParse=function (s) {return eval('(' + s + ')');}</script>"
Set JsonObject = Doc.JsonParse(sHTML)
Set Value = CallByName(JsonObject, "value", VbGet)
For i = 0 To 100 'Orchestratorにあるプロセスが101個を超える場合は値を変更
If CallByName(CallByName(Value, i, VbGet), "Name", VbGet) = ProjectName Then
ReleaseKey = CallByName(CallByName(Value, i, VbGet), "Key", VbGet)
Exit For
End If
Next
UiPath_RequestReleaseKey = ReleaseKey
End Function
リクエストキー取得の要求を行い、その応答をJSONオブジェクトにします。For文でその中から指定したプロジェクト名のリリースキーを取得します。
ジョブの実行を命令(UiPath_StartJob)
Sub UiPath_StartJob(ByVal Token As String, ByVal ReleaseKey As String)
Dim sURL As String, sHTML As String, Body As String
Dim oHttp As Object
Set oHttp = CreateObject("MSXML2.ServerXMLHTTP")
sURL = "ジョブ実行APIのURL"
oHttp.Open "POST", sURL, False
oHttp.setRequestHeader "Content-type", "application/json"
oHttp.setRequestHeader "X-UIPATH-TenantName", "テナント名"
oHttp.setRequestHeader "Authorization", "Bearer " & Token
oHttp.setRequestHeader "X-UIPATH-FolderPath", "Orchestratorのプロセスがあるクラシックフォルダのパス"
oHttp.setRequestHeader "Content-type", "application/json"
Body = "{""startInfo"": {""RobotIds"": [],""Strategy"": ""All"",""ReleaseKey"": """ & ReleaseKey & """,""NoOfRobots"": 0}}"
oHttp.Send Body
sHTML = oHttp.ResponseText '必要に応じてログに出力する仕組みを導入する
End Sub
ジョブの実行を命令する要求を行います。必要に応じて応答を出力するプロシージャなどを作成してログとして出力します。
メールトリガーの仕組みを業務の効率化に活用していただければ幸いです。