AutoShip Daily Run and Retry Rules
The AutoShip Daily Run is an automated job that triggers AutoShip orders to process at a particular time of day—ideally a time of low impact.
AutoShip DailyRun
As a part of the Platform launch and setting up AutoShips, clients submit a request to Customer Care (via [email protected]) to turn on the AutoShip DailyRun. This starts a daily process that runs AutoShips at whatever time you specify. Most will choose a low-impact time like 3 AM each day.
For custom DailyRun logic, use the DailyRun Hook.
Hook name: DirectScale.Disco.Extension.Hooks.Autoships.DailyRun
public class DailyRun : IHook<DailyRunHookRequest, DailyRunHookResponse>
{
public DailyRun() { }
public DailyRunHookResponse Invoke(DailyRunHookRequest request, Func<DailyRunHookRequest, DailyRunHookResponse> func)
{
return func(request);
}
}
services.AddTransient<IHook<DailyRunHookRequest, DailyRunHookResponse>, DailyRun>();
Is there a way to set a commission expiration date for people who do not create a payment merchant account within a certain time period (three months)?
DirectScale doesn't have a way built-in, but this is something you could check during the Daily Run.
- Implement the Daily Run Hook
- Set anyone without an account, who is older than three months, to expired.
AutoShip Retry Rules
You develop specific AutoShip retry rules. If for any reason, an AutoShip should fail, you’ll need to have rules in place so the system knows how to handle it.
Using the ShouldRetryAutoshipOrder Hook, you can set the AutoShip retry rules based on your requirements.
Hook name: DirectScale.Disco.Extension.Hooks.Autoships.ShouldRetryAutoshipOrder
public class ShouldRetryAutoshipOrder : IHook<ShouldRetryAutoshipOrderHookRequest, ShouldRetryAutoshipOrderHookResponse>
{
public ShouldRetryAutoshipOrder() { }
public ShouldRetryAutoshipOrderHookResponse Invoke(ShouldRetryAutoshipOrderHookRequest request, Func<ShouldRetryAutoshipOrderHookRequest, ShouldRetryAutoshipOrderHookResponse> func)
{
return func(request);
}
}
services.AddTransient<IHook<ShouldRetryAutoshipOrderHookRequest, ShouldRetryAutoshipOrderHookResponse>, ShouldRetryAutoshipOrder>();
{
"RetryDate": "0001-01-01T00:00:00",
"Order": {
"BackofficeId": "string",
"LastModifiedDate": "0001-01-01T00:00:00",
"BillPhone": "string",
"CommissionDate": "0001-01-01T00:00:00",
"AssociateId": 0,
"Email": "string",
"InvoiceDate": "0001-01-01T00:00:00",
"LocalInvoiceNumber": 0,
"Name": "string",
"OrderDate": "0001-01-01T00:00:00",
"OrderType": 0,
"OrderNumber": 0,
"SpecialInstructions": "string",
"Status": "string",
"TotalBonus": 0.0,
"TotalCost": 0.0,
"TotalCV": 0.0,
"TotalQV": 0.0,
"Void": false,
"BillAddress": {
"Id": 0,
"AddressLine1": "string",
"AddressLine2": "string",
"AddressLine3": "string",
"City": "string",
"State": "string",
"PostalCode": "string",
"CountryCode": "string"
},
"PartyId": 0,
"IsPaid": false,
"IsShipped": false,
"Custom": {
"Field1": "string",
"Field2": "string",
"Field3": "string",
"Field4": "string",
"Field5": "string"
},
"CanRerun": false,
"LineItems": [],
"Packages": [],
"Totals": [],
"Payments": [],
"OrderCoupons": [],
"USDSubTotal": 0.0,
"USDTotal": 0.0,
"IsMoveable": {
"IsOrderMovable": false,
"MessageType": 0,
"Message": "string"
}
},
"Autoship": {
"AutoshipId": 0,
"AssociateId": 0,
"ShipAddress": {
"Id": 0,
"AddressLine1": "string",
"AddressLine2": "string",
"AddressLine3": "string",
"City": "string",
"State": "string",
"PostalCode": "string",
"CountryCode": "string"
},
"StartDate": "0001-01-01T00:00:00",
"Frequency": 0,
"LastProcessDate": "0001-01-01T00:00:00",
"NextProcessDate": "0001-01-01T00:00:00",
"LastChargeAmount": 0.0,
"Status": "string",
"ShipMethodId": 0,
"PaymentMethodId": "string",
"PaymentMerchantId": 0,
"Custom": {
"Field1": "string",
"Field2": "string",
"Field3": "string",
"Field4": "string",
"Field5": "string"
},
"AutoshipType": 0,
"LineItems": [
{
"ItemId": 0,
"Quantity": 0.0,
"Cost": 0.0,
"Disabled": false,
"ExtendedPrice": 0.0,
"ExtendedOriginalPrice": 0.0,
"ExtendedBonus": 0.0,
"ExtendedCV": 0.0,
"ExtendedQV": 0.0,
"ExtendedRewardPoints": 0.0,
"ExtendedCost": 0.0,
"ProductName": "string",
"Description": "string",
"Specifications": "string",
"LanguageCode": "string",
"SKU": "string",
"Category": {
"Id": 0,
"Name": "string",
"CategoryTranslations": [],
"Description": "string",
"DisplayIndex": 0.0,
"ImageUrl": "string",
"ParentId": 0,
"ProductLineId": 0,
"ShortDescription": "string",
"StoreIds": [],
"HasChildren": false
},
"ChargeShipping": false,
"Height": 0.0,
"Image": "string",
"Length": 0.0,
"LengthUOM": "string",
"MPN": "string",
"PackCount": 0.0,
"PackageGroupId": 0,
"TaxClassId": 0,
"UnitOfMeasure": "string",
"UPC": "string",
"Weight": 0.0,
"WeightUOM": "string",
"Width": 0.0,
"FlagBirthDefects": false,
"HasKitGroups": false,
"FlagCancer": false,
"PriceGroup": 0,
"Custom": {
"Field1": "string",
"Field2": "string",
"Field3": "string",
"Field4": "string",
"Field5": "string"
},
"Images": [
{
"Description": "string",
"Path": "string"
}
],
"Prices": [
{
"GroupId": 0,
"Price": 0.0,
"PriceCurrency": "string",
"OriginalPrice": 0.0,
"Bonus": 0.0,
"CV": 0.0,
"QV": 0.0,
"RewardPoints": 0.0
}
],
"Options": [
{
"OptionId": 0,
"Option": "string"
}
],
"ItemOptions": [
{
"OptionId": 0,
"Option": "string",
"OptionType": 0,
"Values": [
{
"Option": "string",
"SkuExt": "string"
}
]
}
],
"Languages": [
{
"Description": "string",
"LanguageCode": "string",
"ProductName": "string",
"SEOKeywords": "string",
"Specifications": "string"
}
],
"OptionsMap": [
{
"Key": "string",
"Checked": false,
"ItemId": 0,
"Image": "string",
"ExtSku": "string"
}
],
"HasOptions": false,
"Price": 0.0,
"PriceCurrency": "string",
"OriginalPrice": 0.0,
"Bonus": 0.0,
"CV": 0.0,
"QV": 0.0,
"RewardPoints": 0.0,
"CouponsBeingUsed": 0,
"PriceGroups": [
0
]
}
],
"FrequencyString": "string",
"TotalCV": 0.0,
"TotalQV": 0.0,
"CurrencyCode": "string",
"SubTotal": 0.0
}
}
{
"RetryRule": {
"Charge": false,
"AssociateStatusId": 0,
"SendEmail": null,
"Cancel": null,
"NotificationCount": null
}
}
This Hook looks at all orders attached to an AutoShip that haven’t been paid for:
- Because they’re using some delayed payment
- Or, The payment method had insufficient funds
- Etc.
Many companies will have different rules regarding this. For example, try it every other day for three tries, then try one more time on the month's last day. Or, you can set it to try every five days for the next two months. The default range is the day after and the next two days from that.
You can revise these rules at any time.
DailyRun API Endpoint
The API endpoint /command/Corporate.Company.DailyRun
calls the same Client Extension DailyRun
that the DailyRun Hook overrides.
The request object has two properties:
{
"filler": 0,
"CommandKey": "string"
}
The filler
request property does not need to be populated. It is not used. When testing in Swagger, the CommandKey
does not need to be populated.
Updated over 3 years ago