如何从 Web 服务向 Mirth 发送 ACK?
How should one send ACKs to Mirth from a web service?
我想写一个简单的 "web service",我可以使用 Mirth 向其发送 HL7 消息。这个 "web service" 可以像 CGI 脚本一样简单,并且只需要接受 HL7 消息作为字符串(可能还有几个其他值)作为使用 Mirth 的 HTTP 发送器的 POST 请求。
这看起来很简单,但是这个 "web service" 应该如何发回 ACK 让 Mirth 知道是一切正常还是出了什么问题?是否有 Mirth 期望的特定格式作为响应?或者有什么方法可以告诉 Mirth 会发生什么?
注意:我不想在接收端使用 Mirth。
简短的回答是,这完全取决于您...Mirth Connect 可以适应任何响应(或缺少响应)并执行自定义用户逻辑来决定响应是否为 "successful"。
您可以让您的外部 Web 服务生成 HL7 v2.x ACK 并将其发回。然后在 HTTP 发件人端,确保您的响应数据类型设置为 HL7 v2.x,并在目标设置中启用 "Validate Response"。
您还可以让您的 Web 服务生成完全自定义的响应并在 MC 端进行自定义验证。例如,如果您让网络服务发回这样的响应:
{
"success": true,
"message": "Message received successfully."
}
然后您可以将响应数据类型设置为 JSON,并在响应转换器中执行此操作:
if (msg.success !== true) {
responseStatus = ERROR;
}
responseStatusMessage = msg.message;
您也可以仅根据响应状态代码进行验证。默认情况下,对于 HTTP 发件人,只有当 HTTP 请求返回状态 < 400 时,消息状态才会设置为 SENT。任何其他情况和状态将保留为 QUEUED(如果禁用排队,则为 ERROR)。
不过,您可以在响应转换器中覆盖该行为。如果状态特别是 200(而不是其他 2xx 或 3xx 代码),您可能只希望它被发送。将您的 Response 数据类型设置为 Raw(这样即使没有响应,响应转换器也会执行),并在响应转换器中执行此操作:
var responseStatusLine = $('responseStatusLine');
var responseCode = parseInt(responseStatusLine.split(' ')[1], 10);
if (responseCode != 200) {
responseStatus = ERROR;
responseStatusMessage = responseStatusLine.substr(responseStatusLine.indexOf(' ')).trim();
}
我想写一个简单的 "web service",我可以使用 Mirth 向其发送 HL7 消息。这个 "web service" 可以像 CGI 脚本一样简单,并且只需要接受 HL7 消息作为字符串(可能还有几个其他值)作为使用 Mirth 的 HTTP 发送器的 POST 请求。
这看起来很简单,但是这个 "web service" 应该如何发回 ACK 让 Mirth 知道是一切正常还是出了什么问题?是否有 Mirth 期望的特定格式作为响应?或者有什么方法可以告诉 Mirth 会发生什么?
注意:我不想在接收端使用 Mirth。
简短的回答是,这完全取决于您...Mirth Connect 可以适应任何响应(或缺少响应)并执行自定义用户逻辑来决定响应是否为 "successful"。
您可以让您的外部 Web 服务生成 HL7 v2.x ACK 并将其发回。然后在 HTTP 发件人端,确保您的响应数据类型设置为 HL7 v2.x,并在目标设置中启用 "Validate Response"。
您还可以让您的 Web 服务生成完全自定义的响应并在 MC 端进行自定义验证。例如,如果您让网络服务发回这样的响应:
{
"success": true,
"message": "Message received successfully."
}
然后您可以将响应数据类型设置为 JSON,并在响应转换器中执行此操作:
if (msg.success !== true) {
responseStatus = ERROR;
}
responseStatusMessage = msg.message;
您也可以仅根据响应状态代码进行验证。默认情况下,对于 HTTP 发件人,只有当 HTTP 请求返回状态 < 400 时,消息状态才会设置为 SENT。任何其他情况和状态将保留为 QUEUED(如果禁用排队,则为 ERROR)。
不过,您可以在响应转换器中覆盖该行为。如果状态特别是 200(而不是其他 2xx 或 3xx 代码),您可能只希望它被发送。将您的 Response 数据类型设置为 Raw(这样即使没有响应,响应转换器也会执行),并在响应转换器中执行此操作:
var responseStatusLine = $('responseStatusLine');
var responseCode = parseInt(responseStatusLine.split(' ')[1], 10);
if (responseCode != 200) {
responseStatus = ERROR;
responseStatusMessage = responseStatusLine.substr(responseStatusLine.indexOf(' ')).trim();
}