我正在寻找一种方法,可以在为订单分配跟踪号时以编程方式向用户发送电子邮件。我需要能够以编程方式执行此操作,因为我使用外部源来填充跟踪信息。
我想我在这里寻找的是一个特定的触发器或事件,我可以用来触发当管理员点击“发送跟踪信息”按钮时通常会发送的电子邮件。我已经浏览了核心代码,并且无法确定按下该按钮时实际触发的操作。
我们正在使用第三方(eBridge)连接我们的销售工具。一旦订单被标记为已发货并且跟踪号输入到eBridge工具中,它将与magento对话并将跟踪号输入到订单中。问题在于它没有告诉magento发送电子邮件以向客户提供这个新输入的跟踪号码。我想要做的是,一旦将信息发送到magento,就会从magentos端发送一封电子邮件。这可能吗?简而言之,我们想要的是能够让magento发送带有跟踪信息的电子邮件,而无需手动进入每个订单并单击“发送跟踪信息”按钮。
答案 0 :(得分:10)
当您通过控制面板向订单添加新货件时,您可以勾选一个框以发送电子邮件。如果您需要以编程方式发送,管理区域的控制器只需调用sendEmail
上的Mage_Sales_Model_Order_Shipment
方法。
更新:如果跟踪号是通过'标准'方法添加到货件,也就是说货件api的addTrack方法,那么您将能够挂钩sales_order_shipment_track_save_after事件。添加一个沿着......的行做某事的观察者。
public function sendTrackEmail($observer)
{
$track = $observer->getEvent()->getTrack();
$shipment = $track->getShipment(true);
$shipment->sendEmail();
}
答案 1 :(得分:6)
仅供参考,有一个未记录的 API调用就是这样,sendInfo()。我不知道这是什么版本,据我所知,一年多了,我只需要自己解决同样的问题,这是第一个结果之一谷歌。
注意:如果您正在实施此功能,您可能不想要将电子邮件标志发送到sales_order_shipment.create()API调用,因为这将导致两封电子邮件发出同一个订单,一封没有跟踪号码,一封包含跟踪号码。
addTrack()可能已经实现,你只需要立即使用sendInfo()。
sales_order_shipment.addTrack(sessionId, shipmentIncrementId, carrier, title, trackNumber)
sales_order_shipment.sendInfo(sessionId, comment)
发出的电子邮件与您通过点击"发送跟踪信息" Magento后端手动按钮。有关addTrack和一般使用SOAP API的更多说明,请参考Magento API。
至于sendInfo(),请查看来自magento / app / core / Mage / Sales / Model / Order / Shipment / Api.php的源代码以获取帮助:
/**
* Send email with shipment data to customer
*
* @param string $shipmentIncrementId
* @param string $comment
* @return bool
*/
public function sendInfo($shipmentIncrementId, $comment = '')
{
/* @var $shipment Mage_Sales_Model_Order_Shipment */
$shipment = Mage::getModel('sales/order_shipment')->loadByIncrementId($shipmentIncrementId);
if (!$shipment->getId()) {
$this->_fault('not_exists');
}
try {
$shipment->sendEmail(true, $comment)
->setEmailSent(true)
->save();
$historyItem = Mage::getResourceModel('sales/order_status_history_collection')
->getUnnotifiedForInstance($shipment, Mage_Sales_Model_Order_Shipment::HISTORY_ENTITY_NAME);
if ($historyItem) {
$historyItem->setIsCustomerNotified(1);
$historyItem->save();
}
} catch (Mage_Core_Exception $e) {
$this->_fault('data_invalid', $e->getMessage());
}
return true;
}
答案 2 :(得分:0)
如果您希望包含跟踪信息的电子邮件在某个程序时发送,例如eBridge调用salesOrderShipmentAddTrack V2 API,你也可以扩展Mage_Sales_Model_Order_Shipment_Api
e.g。
class PKS_Sales_Model_Order_Shipment_Api extends Mage_Sales_Model_Order_Shipment_Api
public function addTrack
添加调用以在try块中发送电子邮件,例如
try {
$shipment->save();
$track->save();
$shipment->sendEmail(true, '')
->setEmailSent(true)
->save(); /* added email with null comment */
}
您还必须提供SOAP V2的扩展,例如
class PKS_Sales_Model_Order_Shipment_Api_V2 extends PKS_Sales_Model_Order_Shipment_Api
即使它没有方法:)
(示例有我的app / code / local / PKS / Sales模块,用公司名称代替PKS,道歉重新格式化)
app / code / local / PKS / Sales / etc / config.xml
<?xml version="1.0" encoding="UTF-8"?>
<config>
<modules>
<PKS_Sales>
<version>4.0.0.0</version>
<depends>
<Mage_Sales />
</depends>
</PKS_Sales>
</modules>
<global>
<models>
<sales>
<rewrite>
<order_shipment_api>PKS_Sales_Model_Order_Shipment_Api</order_shipment_api>
<order_shipment_api_v2>PKS_Sales_Model_Order_Shipment_Api_V2</order_shipment_api_v2>
</rewrite>
</sales>
</models>
</global>
</config>
花了更多的时间来弄清楚如何编写所需的PKS / Sales / etc / api.xml (示例有我的app / code / local / PKS模块,用公司名称代替PKS)
<config>
<api>
<resources>
<sales_order_shipment translate="title" module="PKS_Sales">
<title>Modified Shipment API</title>
<model>sales/order_shipment_api</model>
<acl>sales/order/shipment</acl>
<methods>
<addTrack translate="title" module="PKS_Sales">
<title>Add new tracking number</title>
<acl>sales/order/shipment/track</acl>
</addTrack>
</methods>
<faults module="PKS_Sales">
<not_exists>
<code>100</code>
<message>Requested shipment does not exist.</message>
</not_exists>
<filters_invalid>
<code>101</code>
<message>Invalid filters given. Details in error message.</message>
</filters_invalid>
<data_invalid>
<code>102</code>
<message>Invalid data given. Details in error message.</message>
</data_invalid>
<order_not_exists>
<code>103</code>
<message>Requested order does not exist.</message>
</order_not_exists>
<track_not_exists>
<code>104</code>
<message>Requested tracking does not exist.</message>
</track_not_exists>
<track_not_deleted>
<code>105</code>
<message>Tracking not deleted. Details in error message.</message>
</track_not_deleted>
</faults>
</sales_order_shipment>
</resources>
<resources_alias>
<order>sales_order</order>
<order_shipment>sales_order_shipment</order_shipment>
</resources_alias>
<v2>
<resources_function_prefix>
<order>salesOrder</order>
<order_shipment>salesOrderShipment</order_shipment>
</resources_function_prefix>
</v2>
</acl>
</api>
</config>
请注意,使用此方法,并使用System&gt;配置&gt;销售&gt;销售电子邮件&gt;启用订单和发货电子邮件,您的客户将获得 - 一封确认新订单的电子邮件 - 没有跟踪号码的第二封电子邮件 - 来自您的API扩展程序的带有跟踪号的货件的第三封电子邮件。
我试过评论Api.php创建函数的
$shipment->sendEmail($email, ($includeComment ? $comment : ''));
但第二封电子邮件不断发送。